package com.edu.test;

import com.edu.bean.Student;
import com.edu.bean.User;
import org.junit.Test;

import java.lang.reflect.Field;

/*
 * @Author:mx
 * @Date:2025/11/4-16:22:55
 */
public class MyTest03 {

    /*
    *   获取 一个 class文件 内部 包含的属性的信息
    *       首先 获取到 这个class文件对应的 Class类型的对象
    *        clazz.getFields() 获取到 这个 类型所包含的 所有的 公有的属性
    *        clazz.getField(String name) 获取到 这个指定名字的属性的对象
    *       clazz.getDeclaredFields();  获取到 这个类型的 所有属性（公有 私有）
    *       clazz.getDeclaredField("username"); 获取指定名字的 属性的信息 （公有 私有）
    * Filed
    *
    * */
    @Test
    public void test01() throws ClassNotFoundException, NoSuchFieldException {
        Class clazz = User.class;
//        Field[] fields = clazz.getFields();
//        System.out.println(fields.length);
//        for (Field field : fields) {
//            System.out.println("属性的名字:"+field.getName());
//            System.out.println("属性的数据类型:"+field.getType());
//            System.out.println("------");
//        }

//
//        Field field = clazz.getField("userId");
//        System.out.println(field.getType());

//        Field[] fields = clazz.getDeclaredFields();
//        System.out.println(fields.length);
//        for (Field field : fields) {
//            System.out.println(field.getName());
//        }

        Field f1 = clazz.getDeclaredField("username");
        System.out.println(f1.getName());

    }

    /*
    *       Field 对象的常用方法
    *
    *
    *
    * */

    @Test
    public void test02() throws NoSuchFieldException, IllegalAccessException {
        Class userClass = User.class;
        User user = new User();
        Field userIdField = userClass.getDeclaredField("userId");
        System.out.println(userIdField.getName());
        System.out.println(userIdField.getType());
        System.out.println(userIdField.getModifiers());
        userIdField.set(user,1);//给指定对象的 属性赋值。
        System.out.println(user);

        Field f2 = userClass.getDeclaredField("username");
        f2.setAccessible(true);//暴力反射
        f2.set(user,"张三");
        System.out.println(user);

        Field f3 = userClass.getDeclaredField("password");
        f3.setAccessible(true);
        System.out.println(f3.get(user));

    }
}
